package cn.tedu.user.service;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.tedu.common.pojo.User;
import cn.tedu.common.utils.MD5Util;
import cn.tedu.common.utils.MapperUtil;
import cn.tedu.user.mapper.UserMapper;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
@Service
public class UserService {
	@Autowired
	private UserMapper userMapper;
	public int checkUserName(String userName) {
		return userMapper.queryExistUser(userName);
	}
	public void saveUser(User user) {
		//type默认就是0
		//userId不存在的
		String userId=UUID.randomUUID().toString();
		//对数据传递表单中的明文加密
		String md5Password=MD5Util.md5(user.getUserPassword());
		//数据封装
		user.setUserId(userId);
		user.setUserPassword(md5Password);
		userMapper.insertUser(user);
	}
	@Autowired
	private ShardedJedisPool pool;
	public String doLogin(User user) {
		/*user对象查询数据库对象数据,判断是否为空
		 *不为空说明登录成功
		 *生成redis的key--ticket "EM_TICKET"+CURRENT+USERNAME
		 *	REDIS中key值生成必须含有业务意义,不能是单独的一个无意义的字符串
		 *	根据领域业务不同,key值如果使用数据的id等唯一数据,必须添加
		 *	前缀字符串
		 *将查询的user转化成json字符串
		 *存储redis的key-value
		 *返回ticket
		 */
		//user明文密码进行加密处理
		//Jedis jedis=new Jedis("10.9.100.26",6379);
		//从连接池中获取资源
		ShardedJedis jedis=pool.getResource();
		try{
			user.setUserPassword(MD5Util.md5(user.getUserPassword()));
			User exist=userMapper.queryOne(user);
			//select * from t_user where user_name=#{}
			//and user_pass=#{}
			if(exist==null){//说明登录失败
				return "";
			}else{//登录成功
				//生成ticket的字符串,具有业务意义的key值
				//表示某个用户(userName唯一)某个时间登录的ticket
				String ticket="EM_TICKET"+
				System.currentTimeMillis()+user.getUserName();
				//userJson
				String userJson=MapperUtil.MP.writeValueAsString(exist);
				jedis.setex(ticket, 60*60*2, userJson);
				return ticket;
			}
		}catch(Exception e){
			e.printStackTrace();
			return "";
		}finally{
			pool.returnResource(jedis);
		}
		
		
	}
	public String queryTicket(String ticket) {
		//Jedis jedis=new Jedis("10.9.100.26",6379);
		ShardedJedis jedis=pool.getResource();
		try{
			return jedis.get(ticket);
		}catch(Exception e){
			e.printStackTrace();
			return "";
		}finally{
			pool.returnResource(jedis);
		}
	}
}






